home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / snmp / mib2c-data / parent-set.m2i < prev    next >
Text File  |  2008-09-22  |  15KB  |  418 lines

  1. #############################################################  -*- c -*-
  2. ## generic include for XXX. Do not use directly.
  3. ##
  4. ## $Id: parent-set.m2i 12851 2005-09-27 15:43:39Z rstory $
  5. ########################################################################
  6. @if $m2c_mark_boundary == 1@
  7. /** START code generated by $RCSfile$ $Revision: 12851 $ */
  8. @end@
  9. ########################################################################
  10. ##//####################################################################
  11. ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  12. ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  13. @if $m2c_processing_type eq 'h'@
  14.  
  15. int ${context}_undo_setup( ${context}_rowreq_ctx *rowreq_ctx);
  16. int ${context}_undo_cleanup( ${context}_rowreq_ctx *rowreq_ctx);
  17. int ${context}_undo( ${context}_rowreq_ctx *rowreq_ctx);
  18. int ${context}_commit( ${context}_rowreq_ctx *rowreq_ctx);
  19. int ${context}_undo_commit( ${context}_rowreq_ctx *rowreq_ctx);
  20. @   if $m2c_irreversible_commit == 1@
  21. int ${context}_irreversible_commit( ${context}_rowreq_ctx *rowreq_ctx);
  22. @   end@
  23.  
  24. @end@ // m2c_processing_type eq 'h'
  25. ########################################################################
  26. ##//####################################################################
  27. ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  28. ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  29. @if $m2c_processing_type eq 'c'@
  30. ##
  31. ## MASTER COPY OF THIS FLOWCHART IS IN agent/helpers/baby_steps.c
  32. ##
  33.     /*
  34.      * NOTE: if you update this chart, please update the versions in
  35.      *       local/mib2c-conf.d/parent-set.m2i
  36.      *       agent/mibgroup/helpers/baby_steps.c
  37.      * while you're at it.
  38.      */
  39.     /*
  40.      ***********************************************************************
  41.      * Baby Steps Flow Chart (2004.06.05)                                  *
  42.      *                                                                     *
  43.      * +--------------+    +================+    U = unconditional path    *
  44.      * |optional state|    ||required state||    S = path for success      *
  45.      * +--------------+    +================+    E = path for error        *
  46.      ***********************************************************************
  47.      *
  48.      *                        +--------------+
  49.      *                        |     pre      |
  50.      *                        |   request    |
  51.      *                        +--------------+
  52.      *                               | U
  53. @if $m2c_table_row_creation == 1@
  54.      * +-------------+        +==============+
  55.      * |    row    |f|<-------||  object    ||
  56.      * |  create   |1|      E ||  lookup    ||
  57.      * +-------------+        +==============+
  58.      *     E |   | S                 | S
  59.      *       |   +------------------>|
  60.      *       |                +==============+
  61.      *       |              E ||   check    ||
  62.      *       |<---------------||   values   ||
  63. @else@
  64.      *                        +==============+
  65.      *       +----------------||  object    ||
  66.      *       |              E ||  lookup    ||
  67.      *       |                +==============+
  68.      *       |                       | S
  69.      *       |                +==============+
  70.      *       |              E ||   check    ||
  71.      *       |<---------------||   values   ||
  72. @end@ # row creation
  73.      *       |                +==============+
  74.      *       |                       | S
  75.      *       |                +==============+
  76.      *       |       +<-------||   undo     ||
  77.      *       |       |      E ||   setup    ||
  78.      *       |       |        +==============+
  79.      *       |       |               | S
  80.      *       |       |        +==============+
  81.      *       |       |        ||    set     ||-------------------------->+
  82.      *       |       |        ||   value    || E                         |
  83.      *       |       |        +==============+                           |
  84.      *       |       |               | S                                 |
  85.      *       |       |        +--------------+                           |
  86.      *       |       |        |    check     |-------------------------->|
  87.      *       |       |        |  consistency | E                         |
  88.      *       |       |        +--------------+                           |
  89.      *       |       |               | S                                 |
  90.      *       |       |        +==============+         +==============+  |
  91.      *       |       |        ||   commit   ||-------->||     undo   ||  |
  92.      *       |       |        ||            || E       ||    commit  ||  |
  93.      *       |       |        +==============+         +==============+  |
  94.      *       |       |               | S                     U |<--------+
  95.      *       |       |        +--------------+         +==============+
  96.      *       |       |        | irreversible |         ||    undo    ||
  97.      *       |       |        |    commit    |         ||     set    ||
  98.      *       |       |        +--------------+         +==============+
  99.      *       |       |               | U                     U |
  100.      *       |       +-------------->|<------------------------+
  101.      *       |                +==============+
  102.      *       |                ||   undo     ||
  103.      *       |                ||  cleanup   ||
  104.      *       |                +==============+
  105.      *       +---------------------->| U
  106. @if $m2c_table_row_creation == 1@
  107.      *                               |
  108.      *                          (err && f1)------------------->+
  109.      *                               |                         |
  110.      *                        +--------------+         +--------------+
  111.      *                        |    post      |<--------|      row     |
  112.      *                        |   request    |       U |    release   |
  113.      *                        +--------------+         +--------------+
  114. @else@
  115.      *                        +--------------+
  116.      *                        |    post      |
  117.      *                        |   request    |
  118.      *                        +--------------+
  119. @end@ # row creation
  120.      *
  121.      */
  122.  
  123. ##----------------------------------------------------------------------
  124. /**
  125.  * Setup up context with information needed to undo a set request.
  126.  *
  127.  * This function will be called before the individual node undo setup
  128.  * functions are called. If you need to do any undo setup that is not
  129.  * related to a specific column, you can do it here.
  130.  *
  131. @if $m2c_undo_embed == 0@
  132. @   if $m2c_data_init == 1@
  133.  * Note that the undo context has been allocated with
  134.  * ${context}_allocate_data(), but may need extra
  135.  * initialization similar to what you may have done in
  136.  * ${context}_rowreq_ctx_init().
  137. @   end@
  138. @end@
  139.  * Note that an individual node's undo_setup function will only be called
  140.  * if that node is being set to a new value.
  141.  *
  142.  * If there is any setup specific to a particular column (e.g. allocating
  143.  * memory for a string), you should do that setup in the node's undo_setup
  144.  * function, so it won't be done unless it is necessary.
  145.  *
  146.  * @param rowreq_ctx
  147.  *        Pointer to the table context (${context}_rowreq_ctx)
  148.  *
  149.  * @retval MFD_SUCCESS : success
  150.  * @retval MFD_ERROR   : error. set will fail.
  151.  */
  152. int
  153. ${context}_undo_setup( ${context}_rowreq_ctx *rowreq_ctx)
  154. {
  155.     int rc = MFD_SUCCESS;
  156.  
  157.     DEBUGMSGTL(("verbose:${context}:${context}_undo_setup","called\n"));
  158.  
  159.     /** we should have a non-NULL pointer */
  160.     netsnmp_assert( NULL != rowreq_ctx );
  161.  
  162.     /*
  163.      * TODO:451:M: |-> Setup $context undo.
  164.      * set up $context undo information, in preparation for a set.
  165.      * Undo storage is in ${m2c_ctx_lh}*
  166.      */
  167.  
  168.     return rc;
  169. } /* ${context}_undo_setup */
  170.  
  171. /**
  172.  * Undo a set request.
  173.  *
  174.  * This function will be called before the individual node undo
  175.  * functions are called. If you need to do any undo that is not
  176.  * related to a specific column, you can do it here.
  177.  *
  178.  * Note that an individual node's undo function will only be called
  179.  * if that node is being set to a new value.
  180.  *
  181.  * If there is anything  specific to a particular column (e.g. releasing
  182.  * memory for a string), you should do that setup in the node's undo
  183.  * function, so it won't be done unless it is necessary.
  184.  *
  185.  * @param rowreq_ctx
  186.  *        Pointer to the table context (${context}_rowreq_ctx)
  187.  *
  188.  * @retval MFD_SUCCESS : success
  189.  * @retval MFD_ERROR   : error. set will fail.
  190.  */
  191. int
  192. ${context}_undo( ${context}_rowreq_ctx *rowreq_ctx)
  193. {
  194.     int rc = MFD_SUCCESS;
  195.  
  196.     DEBUGMSGTL(("verbose:${context}:${context}_undo","called\n"));
  197.  
  198.     /** we should have a non-NULL pointer */
  199.     netsnmp_assert( NULL != rowreq_ctx );
  200.  
  201.     /*
  202.      * TODO:451:M: |-> $context undo.
  203.      * $context undo information, in response to a failed set.
  204.      * Undo storage is in ${m2c_ctx_lh}*
  205.      */
  206.  
  207.     return rc;
  208. } /* ${context}_undo_setup */
  209.  
  210. /**
  211.  * Cleanup up context undo information.
  212.  *
  213.  * This function will be called after set/commit processing. If you
  214.  * allocated any resources in undo_setup, this is the place to release
  215.  * those resources.
  216.  *
  217.  * This function is called regardless of the success or failure of the set
  218.  * request. If you need to perform different steps for cleanup depending
  219.  * on success or failure, you can add a flag to the rowreq_ctx.
  220.  *
  221.  * @param rowreq_ctx
  222.  *        Pointer to the table context (${context}_rowreq_ctx)
  223.  *
  224.  * @retval MFD_SUCCESS : success
  225.  * @retval MFD_ERROR   : error
  226.  */
  227. int
  228. ${context}_undo_cleanup( ${context}_rowreq_ctx *rowreq_ctx)
  229. {
  230.     int rc = MFD_SUCCESS;
  231.  
  232.     DEBUGMSGTL(("verbose:${context}:${context}_undo_cleanup","called\n"));
  233.  
  234.     /** we should have a non-NULL pointer */
  235.     netsnmp_assert( NULL != rowreq_ctx );
  236.  
  237.     /*
  238.      * TODO:452:M: |-> Cleanup $context undo.
  239.      * Undo storage is in ${m2c_ctx_lh}*
  240.      */
  241.  
  242.     return rc;
  243. } /* ${context}_undo_cleanup */
  244.  
  245. ##----------------------------------------------------------------------
  246. /**
  247.  * commit new values.
  248.  *
  249.  * At this point, you should have done everything you can to ensure that
  250.  * this commit will not fail.
  251.  *
  252.  * Should you need different behavior depending on which columns were
  253.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  254.  * set. The definitions for the COLUMN_*_FLAG bits can be found in
  255. @if $m2c_create_fewer_files != 1@
  256.  * ${context}_oids.h.
  257. @else@
  258.  * ${context}.h.
  259. @end@
  260.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  261.  *
  262.  * @param ${context}_rowreq_ctx
  263.  *        Pointer to the users context.
  264.  *
  265.  * @retval MFD_SUCCESS : success
  266.  * @retval MFD_ERROR   : error
  267.  */
  268. int
  269. ${context}_commit( ${context}_rowreq_ctx *rowreq_ctx)
  270. {
  271.     int rc = MFD_SUCCESS;
  272.     int             save_flags;
  273.  
  274.     DEBUGMSGTL(("verbose:${context}:${context}_commit","called\n"));
  275.  
  276.     /** we should have a non-NULL pointer */
  277.     netsnmp_assert( NULL != rowreq_ctx );
  278.  
  279.     /*
  280.      * save flags, then clear until we actually do something
  281.      */
  282.     save_flags = rowreq_ctx->column_set_flags;
  283.     rowreq_ctx->column_set_flags = 0;
  284.  
  285.     /*
  286.      * commit $context data
  287.      * 1) check the column's flag in save_flags to see if it was set.
  288.      * 2) clear the flag when you handle that column
  289.      * 3) set the column's flag in column_set_flags if it needs undo
  290.      *    processing in case of a failure.
  291.      */
  292. @   foreach $node nonindex@
  293. @      include m2c_setup_node.m2i@
  294. @      if $node.settable == 0@
  295. @          next@
  296. @      end@
  297.     if (save_flags & COLUMN_$node.uc_FLAG) {
  298.        save_flags &= ~COLUMN_$node.uc_FLAG; /* clear $node */
  299.        /*
  300.         * TODO:482:o: |-> commit column $node.
  301.         */
  302.        rc = -1;
  303.        if(-1 == rc) {
  304.            snmp_log(LOG_ERR,"$context column $node commit failed\n");
  305.        }
  306.        else {
  307.             /*
  308.              * set flag, in case we need to undo $node
  309.              */
  310.             rowreq_ctx->column_set_flags |= COLUMN_$node.uc_FLAG;
  311.        }
  312.     }
  313.  
  314. @   end@ # foreach $node
  315.     /*
  316.      * if we successfully commited this row, set the dirty flag.
  317.      */
  318.     if (MFD_SUCCESS == rc) {
  319.         rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
  320.     }
  321.  
  322.     if (save_flags) {
  323.        snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
  324.        return MFD_ERROR;
  325.     }
  326.  
  327.     return rc;
  328. } /* ${context}_commit */
  329.  
  330. /**
  331.  * undo commit new values.
  332.  *
  333.  * Should you need different behavior depending on which columns were
  334.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  335.  * set. The definitions for the COLUMN_*_FLAG bits can be found in
  336. @if $m2c_create_fewer_files != 1@
  337.  * ${context}_oids.h.
  338. @else@
  339.  * ${context}.h.
  340. @end@
  341.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  342.  *
  343.  * @param ${context}_rowreq_ctx
  344.  *        Pointer to the users context.
  345.  *
  346.  * @retval MFD_SUCCESS : success
  347.  * @retval MFD_ERROR   : error
  348.  */
  349. int
  350. ${context}_undo_commit( ${context}_rowreq_ctx *rowreq_ctx)
  351. {
  352.     int rc = MFD_SUCCESS;
  353.  
  354.     DEBUGMSGTL(("verbose:${context}:${context}_undo_commit","called\n"));
  355.  
  356.     /** we should have a non-NULL pointer */
  357.     netsnmp_assert( NULL != rowreq_ctx );
  358.  
  359.     /*
  360.      * TODO:485:M: |-> Undo $context commit.
  361.      * check the column's flag in rowreq_ctx->column_set_flags to see
  362.      * if it was set during commit, then undo it.
  363.      *
  364.      * eg: if (rowreq_ctx->column_set_flags & COLUMN_$node.uc_FLAG) {}
  365.      */
  366.  
  367.     
  368.     /*
  369.      * if we successfully un-commited this row, clear the dirty flag.
  370.      */
  371.     if (MFD_SUCCESS == rc) {
  372.         rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
  373.     }
  374.  
  375.     return rc;
  376. } /* ${context}_undo_commit */
  377.  
  378. @if $m2c_irreversible_commit == 1@
  379. ##----------------------------------------------------------------------
  380. /**
  381.  * perform commit actions that are not reversible
  382.  *
  383.  * THERE IS NO ATTEMPT AT RECOVERY FOR ERRORS FROM THIS STATE!
  384.  *
  385.  * @param ${context}_rowreq_ctx
  386.  *        Pointer to the users context.
  387.  *
  388.  * @retval MFD_SUCCESS : success
  389.  * @retval MFD_ERROR   : other error
  390.  */
  391. int
  392. ${context}_irreversible_commit( ${context}_rowreq_ctx *rowreq_ctx)
  393. {
  394.     int rc;
  395.  
  396.     DEBUGMSGTL(("verbose:${context}:${context}_irreversible_commit","called\n"));
  397.  
  398.     /** we should have a non-NULL pointer */
  399.     netsnmp_assert( NULL != rowreq_ctx );
  400.  
  401.     /*
  402.      * TODO:495:o: Irreversible $context commit.
  403.      */
  404. ##$example_start
  405. ##$example_end
  406.  
  407.     return MFD_SUCCESS;
  408. } /* ${context}_irreversible_commit */
  409.  
  410. @end@ // irreversable commit
  411. ##
  412. ########################################################################
  413. @end@ // m2c_processing_type eq 'c'
  414. ########################################################################
  415. @if $m2c_mark_boundary == 1@
  416. /** END code generated by $RCSfile$ $Revision: 12851 $ */
  417. @end@
  418.